相贯线路径功能开发介绍
修订日期 | 修订版本 | 修订内容 | 修订人 |
---|---|---|---|
2023.06.12 | V0.1 | 初始化文档 | 刘刚 |
[TOC]
1 背景介绍
常见的圆柱体和圆柱体相贯分成四类情况: 对心垂直相交、对心斜相交、偏心垂直相交和偏心斜相交。可以通过操作机器人在线示教圆柱体相贯线焊缝工件上的四个特征点,建立工件坐标系相对于机器人基坐标系的位姿变换矩阵,实现圆柱体相贯线焊缝工件坐标系标定;通过相应的插补算法生成机器人基坐标系下的圆柱体相贯线离散点坐标及相应的焊枪姿态,进而实现圆柱体相贯线焊缝轨迹生成及焊枪姿态拟合。下面结合相贯线的三视图来说明4个特征点的位置:
P1: 过大圆柱体轴线且与小圆柱体轴线平行的平面与小圆柱体在底部的交点
P2,P3,P4: 过小圆柱体轴线且与大圆柱体轴线平行的平面: 1)与小圆柱体在左侧顶部的交点P4;2)与大圆柱体在左侧底部的交点P3以及在右侧底部的交点P2
注意: 1. 示教时的视角须与三视图中的视角一致。
2. 大圆柱体定义为母管(变径为R),小圆柱体定义为子管(变径为r),两管轴线距离为d,应满足 d+r<=R
- 插补坐标系建立方法: Y轴平行于P2P3; 原点O为P1沿着Y轴方向移动距离L.其中L=r/sin(α); X 轴为平面P2P3P4的法线方向; Z轴为X轴和Y轴的叉积(右手螺旋定则)。
2 接口介绍
/**
* @brief 向规划器中添加相贯线路径: 现只支持对心垂直相交,不支持对心斜相交、偏心垂直相交和偏心斜相交圆柱体相贯线
* 相贯线路径不支持交融,暂停/恢复和动态调速
* @param points: 描述路径几何信息的路径点,一般至少4个特征点,其中第一个点为机械臂当前点,剩余三个点通过points传入
* @param path_property: 路径属性: 其中的圆柱体相贯线属性包括大圆柱体半径、小圆柱体半径以及两个圆柱体的轴线夹角和距离
* @param move_property: 路径对应的运动属性
* @return: 返回值 < 0 表示添加失败, 具体定义查询return_value_definition.hpp
*/
ARAL_API_COMMON(1.0) int tpAddPoints(const std::vector<PathPoint>& points, const PathProperty& path_property, const MoveProperty& move_property) = 0;
2 开发例程
//! 设置工具位姿
ARAL::interface::RLPose tool = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
robot->mdlSetToolPose(tool);
//! 更新规划起点(如果不是第一次创建规划器;以前的运动规划未出错;未中途切换其他控制器控制机械臂.则不需要更新)
ARAL::interface::RefTrajectoryPoint refPoint;
ARAL::interface::RLJntArray tmp = {0, 0, 0, 0, 0, 0};
ARAL::interface::RLJntArray q = {-0.270707 ,-0.641057 ,1.617539 ,0.501047 ,2.160434 ,1.044430};
robot->tpInitiatePlanner(q, tmp, tmp, refPoint);
//! 示教特征点
ARAL::interface::RLPose frame;
robot->kdCalForwardPosition(q, true, true, frame);
int N = 4;
std::vector<ARAL::interface::RLPose> pose(N, frame);
//! 基本路径属性
ARAL::interface::PathProperty path_property;
path_property.describe_space = interface::DescribeSpace::CARTESIAN;
path_property.curProp.type = interface::CurveType::INTERSECTION_LINE;
//! 相贯线属性
ARAL::interface::IntersectionParameters& para = path_property.curProp.ip;
para.r = 0.1;
para.R = 0.2;
para.D = 0; //只支持对心(两个圆柱体的轴线相交)
para.alpha = 1.5707963; //垂直相交, 要求保留小数点后六位有效数字
pose[1][1] += para.r; //示教点2
pose[3][2] += para.r; //示教点4
//! 摆动属性
path_property.curProp.sp.enable = true;
if(path_property.curProp.sp.enable)
{
path_property.curProp.sp.step = 0.02;
path_property.curProp.sp.type = ARAL::interface::WeaveType::SINE; //不支持螺旋摆动
path_property.curProp.sp.angle = 0.2;
path_property.curProp.sp.amplitude = {0.02,0.02};
path_property.curProp.sp.holdDistance = {0.01,0.01};
path_property.curProp.sp.direction = 0;
}
std::vector<interface::PathPoint> points(N - 1);
for(int i = 0; i < N - 1; i++)
{
points[i].id = i;
points[i].type = interface::DescribeSpace::CARTESIAN;
memcpy(points[i].pose.data(), pose[i + 1].data(), sizeof(double) * ARAL_ROBOT_DOF);
}
//! 运动属性,注意:笛卡尔空间线加速度应小于等于0.1(0.1为调试出的值),因为姿态和路径坐标系保持不变,线加速度太大会导致角加速度超限.姿态维度没有进行速度规划,因此姿态维度运动属性可随意设置.
interface::MoveProperty move_property;
move_property.maxV = {0.015, 3.14};
move_property.maxA = {0.1, 15};
move_property.maxJ = {move_property.maxA[0] * 8, move_property.maxA[1] * 8};
int ret = robot->tpAddPoints(points, path_property, move_property);
3 开发注意事项
- 为了保证精度,需尽可能精确指定特征点,如有必要可以增加一些辅助工具。
4 应用场景
此类曲线常见于机器人焊接应用中,当两个圆柱体相贯时形成的曲线类似马鞍形。马鞍形焊缝属于空间复杂曲线,主要分为上坡焊和下坡焊且一般多为多层多道焊接。